package com.example.caoben_back.utils;

import org.springframework.util.DigestUtils;

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

/**
 * 密码加密工具类
 */
public class PasswordUtil {

    /**
     * 生成盐值
     * @return 盐值
     */
    public static String generateSalt() {
        SecureRandom random = new SecureRandom();
        byte[] salt = new byte[16];
        random.nextBytes(salt);
        return Base64.getEncoder().encodeToString(salt);
    }

    /**
     * MD5加密密码
     * @param password 密码明文
     * @param salt 盐值
     * @return 加密后的密码
     */
    public static String encrypt(String password, String salt) {
        // 将盐值和密码拼接
        String saltedPassword = salt + password;
        // 使用MD5加密
        return DigestUtils.md5DigestAsHex(saltedPassword.getBytes());
    }

    /**
     * 验证密码
     * @param inputPassword 输入的密码
     * @param storedPassword 数据库存储的加密后密码
     * @param salt 盐值
     * @return 是否匹配
     */
    public static boolean verify(String inputPassword, String storedPassword, String salt) {
        // 对输入密码进行相同加密处理
        String encryptedInput = encrypt(inputPassword, salt);
        // 比较加密后的密码
        return encryptedInput.equals(storedPassword);
    }
}